//package org.ytor.core.sqlflow.dsl.dsqlfile.loader.support;
//
//import org.ytor.core.sqlflow.dsl.dsqlfile.loader.DSQLoader;
//import org.ytor.core.sqlflow.dsl.dsqlfile.DsqlSegment;
//
//import java.io.*;
//import java.nio.file.Path;
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * created by yangtong on 2025/8/7 17:41:54
// * <br/>
// * dsql文件加载器默认实现
// */
//public class DefaultDSQLoader implements DSQLoader {
//
//    /**
//     * 以20个横杠开头的行，视为段落行
//     */
//    private static final String segmentLineFlag = "-------------------";
//
//    @Override
//    public List<DsqlSegment> load(InputStream inputStream) {
//        List<String> lines = new BufferedReader(new InputStreamReader(inputStream))
//                .lines().collect(Collectors.toList());
//        return parseSegments(lines);
//    }
//
//    @Override
//    public List<DsqlSegment> load(File file) throws IOException {
//        try (InputStream in = new FileInputStream(file)) {
//            return load(in);
//        }
//    }
//
//    @Override
//    public List<DsqlSegment> load(Path path) throws IOException {
//        return load(path.toFile());
//    }
//
//    @Override
//    public List<DsqlSegment> load(String resourcePath) throws IOException {
//        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourcePath);
//        if (in == null) {
//            throw new FileNotFoundException("Classpath resource not found: " + resourcePath);
//        }
//        return load(in);
//    }
//
//    public List<DsqlSegment> parseSegments(List<String> lines) {
//        // 分析哪些行是分段行
//        List<Integer> segmentLineIndex = new ArrayList<>();
//        for (int i = 0; i < lines.size(); i++) {
//            String line = lines.get(i);
//            if (isSegmentLine(line)) {
//                segmentLineIndex.add(i);
//            }
//        }
//
//        //至少两个分段行，才能产生一个段落
//        if (segmentLineIndex.isEmpty() || segmentLineIndex.size() < 2) {
//            return Collections.emptyList();
//        }
//
//        // 如果最后一个分段行后还有内容，就加一个结尾段
//        if (segmentLineIndex.getLast() < lines.size() - 1) {
//            segmentLineIndex.add(lines.size());
//        }
//
//        // 提取每两个分段行之间的内容作为一个段
//        List<DsqlSegment> result = new ArrayList<>();
//        for (int i = 0; i < segmentLineIndex.size() - 1; i++) {
//            int start = segmentLineIndex.get(i);
//            int end = segmentLineIndex.get(i + 1);
//            List<String> segmentLines = lines.subList(start + 1, end);
//
//            // 跳过空白段
//            if (segmentLines.stream().allMatch(String::isBlank)) {
//                continue;
//            }
//
//            DsqlSegment dsqlSegment = parseSegment(segmentLines);
//            result.add(dsqlSegment);
//        }
//
//        return result;
//    }
//
//
//    private DsqlSegment parseSegment(List<String> lines) {
//        DsqlSegment segment = new DsqlSegment();
//        boolean inTemplate = false;
//        StringBuilder templateBuilder = new StringBuilder();
//        for (String line : lines) {
//            if (line.startsWith("--")) continue; // 注释跳过
//            if (!inTemplate && line.contains("->")) {
//                String[] parts = line.split("->", 2);
//                String key = parts[0].trim();
//                String value = parts[1].trim();
//                switch (key) {
//                    case "id":
//                        segment.setId(value);
//                        break;
//                    case "desc":
//                        segment.setDesc(value);
//                        break;
//                    case "type":
//                        segment.setType(value);
//                        break;
//                    case "args":
//                        segment.setArgs(parseArgs(value));
//                        break;
//                    case "template":
//                        inTemplate = true;
//                        break;
//                    default: /* 忽略或记录未知字段 */
//                        break;
//                }
//            } else if (inTemplate) {
//                templateBuilder.append(line).append("\n");
//            }
//        }
//        segment.setTemplate(templateBuilder.toString().trim());
//        return segment;
//    }
//
//    /**
//     * 参数格式：id: number, name: string, ids: number[], hobby: org.core.HobbyEntity
//     */
//    private Map<String, String> parseArgs(String argValues) {
//        Map<String, String> map = new HashMap<>();
//        Arrays.stream(argValues.trim().split(",")).forEach(argValue -> {
//            String[] kv = argValue.split(":", 2);
//            map.put(kv[0].trim(), kv[1].trim());
//        });
//
//        return map;
//    }
//
//
//    private Boolean isSegmentLine(String line) {
//        return line != null && line.startsWith(segmentLineFlag);
//    }
//}
//
